#ifndef ERROR_H
#define ERROR_H

#include <stdio.h>
#include <stdarg.h>

// 通用错误码定义
#define ERROR_SUCCESS          0       // 成功
#define ERROR_GENERAL          -1      // 一般错误
#define ERROR_MEMORY           -2      // 内存分配错误
#define ERROR_PARAMETER        -3      // 参数错误
#define ERROR_FILE             -4      // 文件操作错误
#define ERROR_DEVICE           -5      // 设备错误
#define ERROR_TIMEOUT          -6      // 超时错误
#define ERROR_NOT_SUPPORTED    -7      // 不支持的操作
#define ERROR_BUSY             -8      // 资源忙
#define ERROR_NOT_FOUND        -9      // 资源未找到
#define ERROR_ALREADY_EXISTS   -10     // 资源已存在
#define ERROR_PERMISSION       -11     // 权限错误
#define ERROR_CONNECTION       -12     // 连接错误
#define ERROR_PROTOCOL         -13     // 协议错误
#define ERROR_CANCELLED        -14     // 操作被取消

/**
 * @brief 获取错误码对应的错误描述
 * @param error_code 错误码
 * @return 错误描述字符串
 */
const char *error_string(int error_code);

/**
 * @brief 设置自定义错误消息
 * @param format 格式化字符串
 * @param ... 可变参数列表
 */
void error_set_message(const char *format, ...);

/**
 * @brief 获取最后设置的自定义错误消息
 * @return 错误消息字符串
 */
const char *error_get_message(void);

/**
 * @brief 清除自定义错误消息
 */
void error_clear_message(void);

/**
 * @brief 打印错误信息（结合错误码和自定义消息）
 * @param file 文件名
 * @param line 行号
 * @param func 函数名
 * @param error_code 错误码
 */
void error_print(const char *file, int line, const char *func, int error_code);

// 错误打印宏定义
#define ERROR_LOG(error_code) \
    error_print(__FILE__, __LINE__, __func__, error_code)

#endif /* ERROR_H */